package modelo.mapa;

import modelo.interfaces.BrindadoresDeServicio;

public class Region {

    private Dimension dimension;
    private Ubicacion ubicacion;
    
    public Region(Ubicacion unaUbicacion,Dimension unaDimension)
    {
        this.dimension=unaDimension;
        this.ubicacion=unaUbicacion;
    }
    
    public Ubicacion obtenerUbicacion()
    {
    	return this.ubicacion;
    }
    
    public Dimension obtenerDimension()
    {
        return this.dimension;
    }
    
    public static Region crearRegionDeAbastecimientoSegunRadioAbastecimiento(BrindadoresDeServicio brindadorDeServicio) 
    {               
        Ubicacion ubicacionDelMargenSuperiorIzquierdo;
        int hectareasVerticalesAAbastecer = 0;
        int hectareasHorizontalesAAbastecer = 0;
        int coordXDelMargenSuperiorIzquierda;
        int coordYDelMargenSuperiorIzquierda;
        
        coordXDelMargenSuperiorIzquierda = brindadorDeServicio.obtenerUbicacion().obtenerCoordenadaX() - brindadorDeServicio.obtenerRadioDeAbastecimiento();
        if (coordXDelMargenSuperiorIzquierda < 0)
        {
            hectareasVerticalesAAbastecer = coordXDelMargenSuperiorIzquierda;
            coordXDelMargenSuperiorIzquierda = 0;
        }
        coordYDelMargenSuperiorIzquierda = brindadorDeServicio.obtenerUbicacion().obtenerCoordenadaY() - brindadorDeServicio.obtenerRadioDeAbastecimiento();
        if (coordYDelMargenSuperiorIzquierda < 0)
        {
            hectareasHorizontalesAAbastecer = coordYDelMargenSuperiorIzquierda;
            coordYDelMargenSuperiorIzquierda = 0;
        }
        
        ubicacionDelMargenSuperiorIzquierdo = new Ubicacion (coordXDelMargenSuperiorIzquierda,coordYDelMargenSuperiorIzquierda);
        hectareasHorizontalesAAbastecer += (brindadorDeServicio.obtenerRadioDeAbastecimiento()*2+1);    
        hectareasVerticalesAAbastecer += (brindadorDeServicio.obtenerRadioDeAbastecimiento()*2+1);
        
        if ( (coordYDelMargenSuperiorIzquierda + hectareasHorizontalesAAbastecer) >= Mapa.getInstance().obtenerCantidadColumnas())
        {
            hectareasHorizontalesAAbastecer = Mapa.getInstance().obtenerCantidadColumnas() - coordYDelMargenSuperiorIzquierda;
        }
        
        if ( (coordXDelMargenSuperiorIzquierda + hectareasVerticalesAAbastecer) >= Mapa.getInstance().obtenerCantidadFilas())
        {
            hectareasVerticalesAAbastecer = Mapa.getInstance().obtenerCantidadFilas() - coordXDelMargenSuperiorIzquierda;
        }
                
        Dimension dimensionDeLaRegion = new Dimension (hectareasVerticalesAAbastecer,hectareasHorizontalesAAbastecer);
        return (new Region(ubicacionDelMargenSuperiorIzquierdo,dimensionDeLaRegion));              
    }
}